//
// Created by Snow on 2023/3/7.
//
#include<cstdlib>
#include<cstdio>
#define MaxSize 20
typedef int ElemType;
typedef struct
{
    ElemType data[MaxSize-1];//存放栈中的数据元素
    int top;//栈顶指针，即存放栈顶元素在data数组中的下标
}SqStack;//顺序栈类型
void InitStack(SqStack *&s)
{
    s=(SqStack *)malloc(sizeof(SqStack));//分配一个顺序栈空间，首地址存放在s中
    s->top=-1;//栈顶指针置为-1
}
void DestroyStack(SqStack *&s)
{
    free(s);
}
bool StackEmpty(SqStack *s)
{
    return (s->top==-1);
}
bool Push(SqStack *&s,ElemType e)
{
    if(s->top==MaxSize-1)//栈满的情况，即栈上溢出
        return false;
    s->top++;//栈顶指针增一
    s->data[s->top]=e;//元素e放在栈顶指针处
    return true;
}
bool Pop(SqStack *&s,ElemType &e)
{
    if(s->top==-1)//栈为空的情况，即栈下溢出
        return false;
    e=s->data[s->top];//取栈顶元素
    s->top--;//栈顶指针减一
    return true;
}
bool GetTop(SqStack *s,ElemType &e)
{
    if(s->top==-1)
        return false;
    e=s->data[s->top];//取栈顶元素
    return true;
}
bool symmetry(ElemType str[])//判断str是否为对称串
{
    int i;
    ElemType e;
    SqStack *st;//定义顺序栈指针
    InitStack(st);//初始化栈
    for(i=0;str[i]!='\0';i++)//将str的所有元素进栈
        Push(st,str[i]);
    for(i=0;str[i]!='\0';i++)//处理str的所有字符
    {
        Pop(st,e);
        if(str[i]!=e)//若e与当前串字符不同表示不是对称串
        {
            DestroyStack(st);
            return false;
        }
    }
    DestroyStack(st);
    return true;
}